python pandas.merge 合并处理两个DataFrame或者DataFrame和Series

您所在的位置:网站首页 panda 合并两个dataframe python pandas.merge 合并处理两个DataFrame或者DataFrame和Series

python pandas.merge 合并处理两个DataFrame或者DataFrame和Series

2023-04-08 23:55| 来源: 网络整理| 查看: 265

该函数可以根据这两个DataFrame的列名(columns)或者行名(索引,indexes)进行合并,如果按照列名进行合并(这也是默认的left_index=False, right_index=False),行名(索引,index)就会重新排部;当然在left_index=True, right_index=True 情况下,会按照行名合并,自然也就会保留行名。参考官方文档pandas.merge

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None) 代码实例:

import pandas as pd def make_df(cols, ind): data = {c:[str(c)+str(i) for i in ind ] for c in cols} return pd.DataFrame(data,ind) ##先声明几个dataframe >>> dfABC = make_df('ABC',range(4)) >>> dfABC A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 3 A3 B3 C3 >>> dfCDE = make_df('CDE',range(2,5)) >>> dfCDE C D E 2 C2 D2 E2 3 C3 D3 E3 4 C4 D4 E4 >>> dfDEF = make_df('DEF',range(5)) >>> dfDEF D E F 0 D0 E0 F0 1 D1 E1 F1 2 D2 E2 F2 3 D3 E3 F3 4 D4 E4 F4 >>> dfdeF = dfDEF.copy() >>> dfdeF.rename(columns={'D':'d', 'E':'e'},index={0: "x", 1: "y", 2: "z"}, inplace = True) >>> dfdeF d e F x D0 E0 F0 y D1 E1 F1 z D2 E2 F2 3 D3 E3 F3 4 D4 E4 F4 how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’ how='left左连接,以双方都有的列为依据,如果右边的数据没有该值则NaN补充 ; how='right右连接,以双方都有的列为依据,如果左边的数据没有该值则NaN补充 ; how='inner取双方的交集 ; how='outer取双方的幷集,以双方都有的列为依据,如果双方都数据没有该值则NaN补充 ; >>> pd.merge(dfABC,dfCDE,how='left') #注意保留了左数据C列的"C0,C1,C2,C3";并且重新排布了行索引 A B C D E 0 A0 B0 C0 NaN NaN 1 A1 B1 C1 NaN NaN 2 A2 B2 C2 D2 E2 3 A3 B3 C3 D3 E3 >>> pd.merge(dfABC,dfCDE,how='right') #注意保留了右数据C列的"C2,C3,C4";并且重新排布了行索引 A B C D E 0 A2 B2 C2 D2 E2 1 A3 B3 C3 D3 E3 2 NaN NaN C4 D4 E4 >>> pd.merge(dfABC,dfCDE,how='inner') #注意只保留了两数据C列中共有的"C2,C3";并且重新排布了行索引 A B C D E 0 A2 B2 C2 D2 E2 1 A3 B3 C3 D3 E3 >>> pd.merge(dfABC,dfCDE,how='outer') #注意保留了左数据C列的所有值("C0,C1,C2,C3,C4 ");并且重新排布了行索引 A B C D E 0 A0 B0 C0 NaN NaN 1 A1 B1 C1 NaN NaN 2 A2 B2 C2 D2 E2 3 A3 B3 C3 D3 E3 4 NaN NaN C4 D4 E4 on=None,on: label or list,如果两数据有两个及以上的共有列,可以设置该值进行选择单一列或者其中几列进行合并,当指定单一列时,其他共有列的列名会加上'_x','_y'进行区分(或者通过suffixes进行设置,suffixes : tuple of (str, str), default (‘_x’, ‘_y’)),该参数也可以对行进行操作; >>> pd.merge(dfCDE,dfDEF,how = 'outer') #两个公共列'D'和'E',同样注意重新排布了行索引 C D E F 0 C2 D2 E2 F2 1 C3 D3 E3 F3 2 C4 D4 E4 F4 3 NaN D0 E0 F0 4 NaN D1 E1 F1 >>> pd.merge(dfCDE,dfDEF,how = 'outer',on = 'D') # 注意其他共有列的列名自动加上'_x','_y'进行区分,同样注意重新排布了行索引 C D E_x E_y F 0 C2 D2 E2 E2 F2 1 C3 D3 E3 E3 F3 2 C4 D4 E4 E4 F4 3 NaN D0 NaN E0 F0 4 NaN D1 NaN E1 F1 >>> pd.merge(dfCDE,dfDEF,how = 'outer',on = 'D',suffixes = ('_of_theleft','_of_theright')) #设置了suffixes C D E_of_theleft E_of_theright F 0 C2 D2 E2 E2 F2 1 C3 D3 E3 E3 F3 2 C4 D4 E4 E4 F4 3 NaN D0 NaN E0 F0 4 NaN D1 NaN E1 F1 >>> pd.merge(dfCDE,dfDEF,how = 'outer',on =['D','E']) #这样设置的结果和pd.merge(dfCDE,dfDEF,how = 'outer')结果一样,因为两数据的共有列也就是['D','E'],同样注意重新排布了行索引 C D E F 0 C2 D2 E2 F2 1 C3 D3 E3 F3 2 C4 D4 E4 F4 3 NaN D0 E0 F0 4 NaN D1 E1 F1 left_on=None, right_on=None,left_on: label or list, or array-like; right_on: label or list, or array-like 如果两数据的列中虽然列名不同但是其列值有相同,则可以通过设置该值进行合并 ; >>> pd.merge(dfCDE,dfdeF) #因为没有公共列所以抛出异常 pandas.errors.MergeError Traceback (most recent call last): File "", line 1, in pandas.errors.MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False >>> pd.merge(dfCDE,dfdeF,left_on='D',right_on='d') #通过设置left_on,right_on的值进行合并,同样注意重新排布了行索引 C D E d e F 0 C2 D2 E2 D2 E2 F2 1 C3 D3 E3 D3 E3 F3 2 C4 D4 E4 D4 E4 F4 >>> pd.merge(dfCDE,dfdeF,left_on='D',right_on='e') #可是如果连列值都不一样就空了 Empty DataFrame Columns: [C, D, E, d, e, F] Index: [] >>> pd.merge(dfCDE,dfdeF,left_on='D',right_on='e',how = 'outer') #同样注意重新排布了行索引 C D E d e F 0 C2 D2 E2 NaN NaN NaN 1 C3 D3 E3 NaN NaN NaN 2 C4 D4 E4 NaN NaN NaN 3 NaN NaN NaN D0 E0 F0 4 NaN NaN NaN D1 E1 F1 5 NaN NaN NaN D2 E2 F2 6 NaN NaN NaN D3 E3 F3 7 NaN NaN NaN D4 E4 F4 left_index=True, right_index=True 设置该值会按照行名合并,会保留行名 >>> pd.merge(dfCDE,dfdeF,left_index=True,right_index=True) #注意保留了行名(index) C D E d e F 3 C3 D3 E3 D3 E3 F3 4 C4 D4 E4 D4 E4 F4 >>> pd.merge(dfCDE,dfdeF,left_index=True,right_index=True,how = 'outer') #注意保留了行名(index) C D E d e F 2 C2 D2 E2 NaN NaN NaN 3 C3 D3 E3 D3 E3 F3 4 C4 D4 E4 D4 E4 F4 x NaN NaN NaN D0 E0 F0 y NaN NaN NaN D1 E1 F1 z NaN NaN NaN D2 E2 F2 copy=True, indicator=False, validate=None请参考官方文档吧! 最后,这是什么鬼? >>> pd.merge(dfCDE,dfdeF,left_index=True,right_index=True,left_on=['E'],right_on=['e'],how = 'outer') C D E d e F 2 C2 D2 E2 NaN NaN NaN 3 C3 D3 E3 D3 E3 F3 4 C4 D4 E4 D4 E4 F4 x NaN NaN x D0 E0 F0 y NaN NaN y D1 E1 F1 z NaN NaN z D2 E2 F2 Does anyone can explain the 'x','y','z' in the values?


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3